一种实现流控制传输协议的动态流创建方法,其特征在于,该方法包括下列步骤:形成初始协商参数;形成请求块的各字段;形成应答块的各字段;形成协商;请求端进行相应处理;以及应答端进行相应处理。本发明减少了应用在使用标准SCTP时等待空闲流的时延,降低了应用在SCTP流调度时的复杂度,完善了现有标准SCTP。1、一种实现流控制传输协议的动态流创建方法,其特征在于,该方法包括 下列步骤:a)形成初始协商参数;b)形成请求块的各字段;c)形成应答块的 各字段;d)形成协商;e)请求端进行相应处理;以及f)应答端进行相应处理。 2、根据权利要求1所述方法,其特征在于,在步骤a)中:协商参数的类型 字段16比特,长度字段16比特,初始序列号字段32比特。 3、根据权利要求1所述方法,其特征在于,在步骤b)中:请求块类型字段 8比特,标识字段8比特,长度字段16比特,序列号字段32比特,请求流数目 字段16比特,请求流ID字段16比特。 4、根据权利要求1所述方法,其特征在于,在步骤c)中:应答块类型字段 8比特,标识字段8比特,长度字段16比特,序列号字段32比特,应答流数目 字段16比特,应答流ID字段16比特。 5、根据权利要求1所述方法,其特征在于,在步骤d)中: 端点A向端点B发起建立关联的请求块INIT,INIT中携带表明端点A支 持动态流创建的参数; 端点B如果支持动态流创建功能,则INITxa0ACK中携带支持动态流创建的 参数,否则INITxa0ACK中携带Unrecognizedxa0Parameters类型的ERROR参数。 6、根据权利要求1所述方法,其特征在于,在步骤e)中: 接收上层请求,端点A创建动态流创建的请求块,在端点A创建动态流创 建的请求块时,端点A先计算请求创建的流数目与当前该关联内存在的出流数 目及待创建流数目之和是否大于65536,如果大于65536,则向上层调用返回出 错信息; 为动态流创建的请求块字段分配一个序列号,序列号的初值在关联建立时 在INIT块和INITxa0ACK块动态流创建参数中协商,序列号严格按照加1递增分配 给新创建的动态流创建的请求块; 如果在端点A该关联的输出方向上没有正在发送或未确认的动态流创建的 请求块,发送构建好的动态流创建的请求块;否则,将该动态流创建的请求块 放入待发送动态流创建的请求块队列,等待之前发送的动态流创建的请求块被 确认或发生超时; 动态流创建的请求块发送后,为其启动重传定时器,超时重传时间采用动 态流创建的请求块传输路径的超时重传时间, 当端点A收到一个动态流创建的应答块确认一个动态流创建的请求块后,端 点A停止为动态流创建的请求块启动的重传定时器,同时清零关联错误计数器和 对应得路径错误计数器; 端点A收到动态流创建的应答块,按照响应创建流字段的值更新端点A对应 关联的输出流数目,开始使用新的输出流号传输数据; 端点A收到由动态流创建的请求块引起的对端发送的错误类型为 Unrecognizedxa0Chunkxa0Type的ERROR块,则端点A禁止再发送动态流创建的请求 块,并将现有的为动态流创建的请求块的重传定时器关闭; 端点A收到一个乱序的动态流创建的应答块,如果其序列号大于端点A已发 送的最大的动态流创建的请求块的序列号,则丢弃该动态流创建的应答块;如 果其序列号小于端点A已收到确认的连续的最大的动态流创建的请求块的序列 号,则丢弃该动态流创建的应答块;以及 当端点A发送动态流创建的请求块后,直到对应的动态流创建的应答块返 回,对应关联才使用新增加的流号。 7、根据权利要求1或6所述方法,其特征在于,在步骤e)中: 如果为动态流创建的请求块开启的重传定时器超时,则端点A执行: 相应得路径错误计数及关联错误计数加1; 对应的动态流创建的请求块传输路径的超时重传时间改为原数值的2倍; 重传该动态流创建的请求块,如果有多于一条的活动路径,则从另外一条 路径重传,该重传动态流创建的请求块与其他具有新的序列号的动态流创建的 请求块分别进行传输,以保证任一时刻关联中只有一个动态流创建请求块未被 确认;以及 为该重传动态流创建的请求块重新启动重传定时器,重传超时时间依赖于 其选择传输路径的重传超时时间。 8、根据权利要求1所述方法,其特征在于,在步骤f)中: 端点B判断接收的动态流创建的请求块,查询自己的配置是否支持动态流创 建,如果不支持,返回错误类型为Unrecognizedxa0Chunkxa0Type的ERROR块,跳 过该块处理; 端点B在对应的关联中维持一个期望收到的动态流创建的请求块的序列号 的值ESN,同时保存一个最近发送的动态流创建的应答块,如果接收到的动态 流创建的请求块的序列号为ESN-1,则重发保存的动态流创建的应答块;如果收 到的动态流创建的请求块的序列号小于ESN-1或者大于ESN,丢弃该动态流创建 的请求块; 端点B创建一个新的动态流创建的应答块,将动态流创建的请求块的序列号 字段的值拷贝到动态流创建的应答块的序列号字段,同时分配资源生成其他字 段依次填充,向A端发送该动态流创建的应答块,同时将更新保存的最新的动态 流创建的应答块; 端点B如果受资源限制不响应动态流创建的请求块,则生成错误类型为Out ofxa0Resource的ERROR块,并发送到端点A。 技术领域 本发明涉及网络通讯技术领域,具体涉及一种实现流控制传输协议(SCTP) 的动态流创建方法。 背景技术 标准的SCTP只在关联建立之初通过协商建立确定数目的流,而在关联建 立之后流的数目不能修改。当关联中的流都被用来服务一些长时间会话的应用 或者是大的数据量传输时,如果有其他应用内容需要传输,就必须等待,直到 一个流变为空闲状态。而这种等待时延对于某些应用是不能容忍的。 Bryanxa0Ford在其论文《Structuredxa0Streams:axa0Newxa0Transportxa0Abstraction》 (SIGCOMMxa0Computerxa0Communicationxa0Review,Volumexa037,Issuexa04,ppxa0361-372, Octoberxa02007)中提到一种动态流使用的思想,但这种思想是基于其提出的SST 协议中流的生命周期较短而提出的,当其生命周期结束一个流就要销毁同时创 建一个新流。 发明内容 本发明的目的在于提供一种实现流控制传输协议的动态流创建方法,以减 少应用在使用标准SCTP时等待空闲流的时延,降低应用在SCTP流调度时的 复杂度。 为此,本发明提供了一种实现流控制传输协议的动态流创建方法,其特征 在于,该方法包括下列步骤:形成初始协商参数;形成请求块的各字段;形成 应答块的各字段;形成协商;请求端进行相应处理;以及应答端进行相应处理。 优选地,所述的方法包括如下步骤: 1)基于SCTP的端点A向基于SCTP的端点B发送建立关联请求,请求初 始块INIT中包含动态流创建协商参数; 2)端点B收到INIT请求块后,进行相应处理。 优选地,步骤2)中所述相应处理包括: A21)如果端点B支持动态流创建,则端点B向端点A发送INITxa0ACK应 答块中同样包含动态流创建协商参数; A22)如果端点B不支持动态流创建,端点B跳过对动态流创建协商参数 的处理,向端点A发送INITxa0ACK应答块中包含Unrecognizedxa0Parameters类 型的ERROR参数,关联继续建立; 3)如果两端建立关联,协商均支持动态流创建,具体步骤包括: A31)当端点A需要向端点B请求创建动态流时,端点A相应处理; A32)当端点A需要向端点B请求创建动态流时,端点B相应处理; 其中,步骤A31)具体包括: V1)接收上层请求,创建一个动态流创建的请求块,在端点A创建动态流 创建的请求块时,端点A先计算请求创建的流数目与当前该关联内存在的出流 数目及待创建流数目之和是否大于65536,如果大于65536,则向上层调用返回 出错信息;如果小于65536,执行V2; V2)为动态流创建的请求块序列号字段分配一个序列号,序列号的初值在 关联建立时在INIT块和INITxa0ACK块动态流创建参数中协商,序列号严格按照加 1递增分配给新创建的动态流创建的请求块; V3)如果在端点A该关联的输出方向上没有正在发送或未确认的动态流创 建的请求块,发送构建好的动态流创建的请求块;否则,将该动态流创建的请 求块放入待发送动态流创建的请求块队列,等待之前发送的动态流创建的请求 块被确认或发生超时; V4)动态流创建的请求块发送后,为其启动重传定时器;超时重传时间采 用动态流创建的请求块传输路径的超时重传时间; V5)当端点A收到一个动态流创建的应答块确认一个动态流创建的请求块 后,端点A应停止为动态流创建的请求块启动的重传定时器,同时清零关联错误 计数器和对应得路径错误计数器; V6)端点A收到动态流创建的应答块,按照Responsexa0addxa0streamsxa0number (响应创建流)字段的值更新端点A对应关联的输出流数目,开始使用新的输出 流号传输数据; V7)端点A收到由动态流创建的请求块引起的对端发送的错误类型为 Unrecognizedxa0Chunkxa0Type的ERROR块,则端点A禁止再发送动态流创建的请求 块,并将现有的为动态流创建的请求块的重传定时器关闭; V8)端点A收到一个乱序的动态流创建的应答块,如果其序列号大于端点 A已发送的最大的动态流创建的请求块的序列号,则丢弃该动态流创建的应答 块;如果其序列号小于端点A已收到确认的连续的最大的动态流创建的请求块的 序列号,则丢弃该动态流创建的应答块;否则按照V5处理; V9)当端点A发送动态流创建的请求块后,对应关联不能使用新增加的流 号直到对应的动态流创建的应答块返回; 如果为动态流创建的请求块开启的重传定时器超时,则端点A需要执行下列 步骤: N1)相应的路径错误计数及关联错误计数加1; N2)对应的动态流创建的请求块传输路径的超时重传时间改为原数值的2 倍; N3)重传该动态流创建的请求块,如果有多于一条的活动路径,则从另外 一条路径重传;该重传动态流创建的请求块不可以与其他具有新的序列号的动 态流创建的请求块绑定传输; N4)为该重传动态流创建的请求块重新启动重传定时器,重传超时时间依 赖于其选择传输路径的重传超时时间, 其中步骤A32)具体包括: C1)判断接收到的动态流创建的请求块,查询自己的配置是否支持动态流 创建,如果支持执行C2,否则,返回错误类型为Unrecognizedxa0Chunkxa0Type的 ERROR块,跳过该块处理; C2)端点B在对应的关联中维持一个期望收到的动态流创建的请求块的序 列号的值ESN,同时保存一个最近发送的动态流创建的应答块,如果接收到的 动态流创建的请求块的序列号为ESN-1,则重发保存的动态流创建的应答块;否 则如果收到的动态流创建的请求块的序列号为ESN,执行C3;如果收到的动态 流创建的请求块的序列号小于ESN-1或者大于ESN,丢弃该动态流创建的请求 块; C3)端点B创建一个新的动态流创建的应答块,将动态流创建的请求块的 序列号字段的值拷贝到动态流创建的应答块的序列号字段,同时分配资源生成 其他字段依次填充,向A端发送该动态流创建的应答块,同时将更新保存的最新 的动态流创建的应答块; C4)端点B如果受资源限制不能响应动态流创建的请求块,应生成错误类 型为Outxa0ofxa0Resource的ERROR块并发送到端点A。 本发明主要是将动态流创建的思想引入标准化的SCTP协议,并且根据 SCTP的特点不需要增加流销毁的过程。总的来说本发明的动态流创建是基于 更好服务应用的考虑,而SST则是根据其自身特点必须实施的方法,因此二者 有着本质的区别。 通过上述技术方案的描述可知,本发明通过新增加的初始协商参数和块格 式,为现有SCTP实现动态流创建提供数据格式的保证;本发明通过对实现动 态流创建机制的描述,实现了现有SCTP的动态流创建功能的功能。通过动态 流创建方法,可以减少应用在使用标准SCTP时等待空闲流的时延,降低了应 用在SCTP流调度时的复杂度,完善了现有标准SCTP。 附图说明 图1为支持SCTP动态流创建初始协商参数数据格式; 图2为SCTP动态流创建的请求块数据格式; 图3为SCTP动态流创建的应答块数据格式; 图4为使用SCTP动态流创建机制的流程示意图。 具体实施方式 本发明的核心是:扩展了标准SCTP,为其增加了一个新的初始协商参数 格式,增加了两个新的控制块传输格式,以及通过使用这些新增内容实现SCTP 动态流创建的机制。 新增加的初始协商参数格式如图1所示,包括的字段有类型、长度、和初 始序列号3个字段。类型字段16比特,表明动态流创建初始协商参数的类型; 长度字段16比特,表明动态流创建参数以字节计数的长度;初始序列号字段32 比特,表明该动态流创建参数发送端第一个动态流创建的请求块使用的序列号。 为了与标准SCTP兼容及符合IANA的要求,可以定义类型值为0xC010,长度 为8,初始序列号可以和INIT协商的DATA块使用的初始序列号相同,也可以 单独设定。 新增加的动态流创建的请求块(ADDSTREAMSxa0chunk)如图2所示,包 括类型、标识、块长度、序列号、请求流数目、和若干请求流ID等字段。类型 字段8比特,表明动态流创建的请求块的类型;标识字段8比特,区分动态流 创建的请求块和动态流创建的应答块及其他扩展应用;块长度字段16比特,表 明动态流创建的请求块以字节计数的长度;序列号字段32比特,在一个关联中 唯一标识一个动态流创建的请求块;请求流数目字段16比特,表明该动态流创 建的请求块请求新创建的输出流数目;请求流ID字段16比特,表明动态流创 建的请求块请求创建的输出流ID。为了与标准SCTP兼容及符合IANA的要求, 可以定义类型值为0xC9,标志位为0x00,序列号最初采用初始序列号之后逐一 递增。 新增加的动态流创建的应答块(ADDSTREAMSxa0ACKxa0chunk)如图3所示, 包括类型、标识、块长度、序列号、应答流数目、和若干应答流ID等字段。类 型字段8比特,表明动态流创建的应答块的类型;标识字段8比特,区分动态 流创建的请求块和动态流创建的应答块及其他扩展应用;块长度字段16比特, 表明动态流创建的应答块以字节计数的长度;序列号字段32比特,表明该动态 流创建的应答块是对哪一个动态流创建请求块的应答;应答流数目字段16比特, 表明该动态流创建的应答块应答新创建的输入流数目;应答流ID字段16比特, 表明动态流创建的应答块应答创建的输入流ID。为了与标准SCTP兼容及符合 IANA的要求,可以定义类型值为0xC9,标志位为0x01,序列号为其应答动态 流创建的请求块序列号字段的拷贝。 当通信双方均支持动态流创建功能时,则建立关联支持动态流创建,否则 不能在数据传输过程中使用动态流创建的相关参数和控制块。通信双方是否支 持动态流创建由双方在关联建立初始阶段协商确认。通信发起端在INIT块中携 带动态流创建初始协商参数,表明其可以使用动态流创建功能,动态流创建初 始协商参数序列号字段携带该关联本端第一个动态流创建的请求块将使用的序 列号。通信接收端根据本段配置发送关于应答的ININxa0ACK块,如果不支持, 则ININxa0ACK块中不携带动态流创建初始协商参数,但是对应携带一个 Unrecognizedxa0Parameters类型的ERROR参数;否则,ININxa0ACK块中携带动 态流创建初始协商参数,动态流创建初始协商参数序列号字段携带该关联本端 第一个动态流创建的请求块使用的序列号。 当通信双方都支持SCTP动态流创建功能时,如果一端应用通过调用应用 接口函数触发SCTP动态流创建,并传递应用期望创建输出流的数目及相应输 出流ID,则该端在SCTP协议栈接收应用传递参数,生成动态流创建的请求块 发送到通信对端。对端收到动态流创建的请求块,进行一些有效性判断,如果 通过验证,则在本端分配资源,按照请求进行响应,然后,发送动态流创建的 应答块。 如图4所示,步骤1:端点A向端点B发起建立关联的请求块INIT,INIT 中携带表明端点A支持动态流创建的参数,该参数初始序列号字段采用与INIT 协商DATA块初始序列号相同的值。 步骤2:端点B查询自身配置,如果端点B不支持动态流创建功能,则INIT ACK中不携带支持动态流创建的参数,而是携带一个由端点A发送的动态流创 建的参数引起的Unrecognizedxa0Parameters类型的ERROR参数,关联继续建立; 否则,ININxa0ACK块中携带支持动态流创建的参数,该参数初始序列号字段采 用与INITxa0ACK协商DATA块初始序列号相同的值。 步骤3:应用根据程序运行情况,通过接口函数向协议栈请求创建新的输出 流,并将应用期望新创建的输出流的数目,新创建输出流使用的流号等参数传 递到协议栈,等待创建结果返回。 步骤4:协议栈接收应用传递的参数,生成动态流创建的请求块。生成动态 流创建的请求块的过程中端点A计算请求创建的流数目与当前该关联内存在的 出流数目及待创建流数目之和是否大于65536,如果大于65536,则向上层调用 返回出错信息;如果小于65536,则进行创建,填充动态流创建的请求块的其他 字段。如果动态流创建的请求块发送队列中有动态流创建的请求块等待,将新 生成的动态流创建的请求块排在动态流创建的请求块发送队列队尾,如果动态 流创建的请求块发送队列为空,则将该新生成的动态流创建的请求块发送到网 络。 步骤5:端点B收到动态流创建的请求块,首先验证其序列号,如果验证 不通过,将该动态流创建的请求块直接丢弃,否则开始进行处理。首先,计算 请求创建的流数目与当前端点B该关联中的入流之和,如果大于65536,则只 新创建当前入流数目与65536差值的入流;如果小于65536,则按照请求流树木 创建。生成动态流创建的应答块,将动态流创建的请求块的序列号拷贝到动态 流创建的应答块的序列号字段,其他依次填充。将动态流创建的应答块发送到 网络中。 步骤6:端点A接收到动态流创建的应答块,表明端点B创建了新的如入 流。端点A按照动态流创建的应答块重新设定协议栈对输出流的纪录,并向应 用返回成功,同时传递新创建的输出流数目和流ID等参数。如果端点A收到 错误类型为Unrecognizedxa0Chunkxa0Type的ERROR块,则端点A禁止再发送任 何动态流创建的请求块和动态流创建的应答块。 步骤7:应用接收到新创建的流号,在新创建的流号上写数据,并记录每个 输出流的忙闲状态。 步骤8:协议栈使用新的流号传输数据。 步骤9:端点B使用新的流号接收数据,并将数据送到一个应用。 上面的流程是基于附图4的一种简单的实现SCTP动态流创建的流程。由 于实际网络中的各种拥塞、抖动、丢包、和乱序等情况,以及伪造攻击等黑客 攻击,SCTP动态流创建的过程可能要比附图4的描述复杂,但也在本发明的 保护范围之内。 以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局 限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易 想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护 范围应该以权利要求书的保护范围为准。